{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 量子近似优化算法\n",
    "\n",
    "\n",
    "`Linux` `CPU` `全流程` `初级` `中级` `高级`\n",
    "\n",
    "[![](https://gitee.com/mindspore/docs/raw/master/tutorials/training/source_zh_cn/_static/logo_source.png)](https://gitee.com/mindspore/mindquantum/blob/master/tutorials/quantum_approximate_optimization_algorithm.ipynb)\n",
    "\n",
    "## 概述\n",
    "\n",
    "量子近似优化算法（Quantum Approximate Optimization Algorithm，QAOA）是利用量子计算机来近似解决组合优化问题的量子算法，最早由Farhi等人于2014年提出。在本教程里，我们将利用QAOA算法来解决最大割问题（Max-Cut），来熟悉MindQuantum中量子线路的搭建和训练。\n",
    "\n",
    "> 本文档适用于CPU环境。   \n",
    "> 你可以在这里找到完整的可运行的样例代码：<https://gitee.com/mindspore/mindquantum/blob/master/tutorials/source/quantum_approximate_optimization_algorithm.py>。\n",
    "\n",
    "## 环境准备\n",
    "\n",
    "本教程所需要的额外库：\n",
    "\n",
    "- networkx\n",
    "\n",
    "> `networkx`是创建、操作和研究复杂网络的结构、动态和功能库。可通过`pip3 install networkx`来进行安装。\n",
    "\n",
    "## Max-Cut问题描述\n",
    "\n",
    "Max-Cut问题是图论中的一个NP-complete问题，它需要将一个图中的顶点分成两部分，并使得两部分被切割的边最多。如下图（a），一个图由五个顶点构成，相互连接的边为```(0, 1), (0, 2), (1, 2), (2, 3), (3, 4), (0, 4)```。为了使得被切割的边最多，我们尝试通过（b）图的分割，将1、2、4分为一组，0、3分成另一组，因此可得到被切割的边有5条。当图中顶点增多时，我们很难找到有效的经典算法来解决Max-Cut问题。下面，我们介绍怎么将Max-Cut问题转化为一个哈密顿量的基态能力求解问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![max cut](./images/Max_Cut.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Max-Cut问题量子化\n",
    "\n",
    "这里我们将图中的每个顶点赋予一个量子比特，当顶点被分到左边时，我们将该顶点上的量子比特设置为$\\left|0\\right>$态，同理，右边为$\\left|1\\right>$态，当两个顶点被分到不同的集合中时，这两个顶点上的比特将处于不同的量子态。例如对于第0个顶点和第1个顶点，当其连线被切割是，两个顶点上的比特对应的量子态可以为$\\left|\\psi\\right>=\\left|0_11_0\\right>$或$\\left|\\psi\\right>=\\left|1_10_0\\right>$，其中下角标表示顶点的序号。此时，我们选择哈密顿量$H=(Z_1Z_0-1)/2$，这里$Z$为泡利$Z$算符。不难发现：\n",
    "$$\\left<\\psi\\right|H\\left|\\psi\\right>=-1$$\n",
    "而当顶点被分到同一集合中是，不难验证此时：\n",
    "$$\\left<\\psi\\right|H\\left|\\psi\\right>=0$$\n",
    "因此，我们只用按照上面的规则，写出图对应的哈密顿量$H$，利用量子计算机求得$H$的基态能量与基态，我们就可以得到该图的Max-Cut切割方案与最大切割边数。我们记所有边的集合为$C$，所有边个数为$c$，则哈密顿量可写为：\n",
    "$$H=\\sum_{(i,j)\\in C}(Z_iZ_j-1)/2$$\n",
    "\n",
    "## 导入相关依赖"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from mindquantum import Circuit, Hamiltonian, UN, H, ZZ, RX, StateEvolution\n",
    "from mindquantum.nn import MindQuantumAnsatzOnlyLayer\n",
    "from mindquantum.ops import QubitOperator\n",
    "import networkx as nx\n",
    "import mindspore.nn as nn\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 搭建所需求解的图\n",
    "\n",
    "通过`add_path`可在图中添加边。最后画出图的结构。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<svg height=\"302.4pt\" version=\"1.1\" viewBox=\"0 0 446.4 302.4\" width=\"446.4pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n   <cc:Work>\n    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n    <dc:date>2021-08-30T08:18:14.080359</dc:date>\n    <dc:format>image/svg+xml</dc:format>\n    <dc:creator>\n     <cc:Agent>\n      <dc:title>Matplotlib v3.4.2, https://matplotlib.org/</dc:title>\n     </cc:Agent>\n    </dc:creator>\n   </cc:Work>\n  </rdf:RDF>\n </metadata>\n <defs>\n  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n  <g id=\"patch_1\">\n   <path d=\"M 0 302.4 \nL 446.4 302.4 \nL 446.4 0 \nL 0 0 \nz\n\" style=\"fill:#ffffff;\"/>\n  </g>\n  <g id=\"axes_1\">\n   <g id=\"LineCollection_1\">\n    <path clip-path=\"url(#p5aae5892ac)\" d=\"M 26.836364 159.056685 \nL 120.02632 282.109091 \n\" style=\"fill:none;stroke:#000000;\"/>\n    <path clip-path=\"url(#p5aae5892ac)\" d=\"M 26.836364 159.056685 \nL 90.647402 20.290909 \n\" style=\"fill:none;stroke:#000000;\"/>\n    <path clip-path=\"url(#p5aae5892ac)\" d=\"M 26.836364 159.056685 \nL 333.896634 182.85909 \n\" style=\"fill:none;stroke:#000000;\"/>\n    <path clip-path=\"url(#p5aae5892ac)\" d=\"M 120.02632 282.109091 \nL 333.896634 182.85909 \n\" style=\"fill:none;stroke:#000000;\"/>\n    <path clip-path=\"url(#p5aae5892ac)\" d=\"M 333.896634 182.85909 \nL 419.563636 45.802091 \n\" style=\"fill:none;stroke:#000000;\"/>\n    <path clip-path=\"url(#p5aae5892ac)\" d=\"M 419.563636 45.802091 \nL 90.647402 20.290909 \n\" style=\"fill:none;stroke:#000000;\"/>\n   </g>\n   <g id=\"PathCollection_1\">\n    <defs>\n     <path d=\"M 0 8.660254 \nC 2.296726 8.660254 4.499694 7.747755 6.123724 6.123724 \nC 7.747755 4.499694 8.660254 2.296726 8.660254 0 \nC 8.660254 -2.296726 7.747755 -4.499694 6.123724 -6.123724 \nC 4.499694 -7.747755 2.296726 -8.660254 0 -8.660254 \nC -2.296726 -8.660254 -4.499694 -7.747755 -6.123724 -6.123724 \nC -7.747755 -4.499694 -8.660254 -2.296726 -8.660254 0 \nC -8.660254 2.296726 -7.747755 4.499694 -6.123724 6.123724 \nC -4.499694 7.747755 -2.296726 8.660254 0 8.660254 \nz\n\" id=\"m8770371a71\" style=\"stroke:#1f78b4;\"/>\n    </defs>\n    <g clip-path=\"url(#p5aae5892ac)\">\n     <use style=\"fill:#1f78b4;stroke:#1f78b4;\" x=\"26.836364\" xlink:href=\"#m8770371a71\" y=\"159.056685\"/>\n     <use style=\"fill:#1f78b4;stroke:#1f78b4;\" x=\"120.02632\" xlink:href=\"#m8770371a71\" y=\"282.109091\"/>\n     <use style=\"fill:#1f78b4;stroke:#1f78b4;\" x=\"333.896634\" xlink:href=\"#m8770371a71\" y=\"182.85909\"/>\n     <use style=\"fill:#1f78b4;stroke:#1f78b4;\" x=\"419.563636\" xlink:href=\"#m8770371a71\" y=\"45.802091\"/>\n     <use style=\"fill:#1f78b4;stroke:#1f78b4;\" x=\"90.647402\" xlink:href=\"#m8770371a71\" y=\"20.290909\"/>\n    </g>\n   </g>\n   <g id=\"text_1\">\n    <g clip-path=\"url(#p5aae5892ac)\">\n     <!-- 0 -->\n     <g transform=\"translate(22.661676 162.367935)scale(0.12 -0.12)\">\n      <defs>\n       <path d=\"M 2944 2338 \nQ 2944 3213 2780 3570 \nQ 2616 3928 2228 3928 \nQ 1841 3928 1675 3570 \nQ 1509 3213 1509 2338 \nQ 1509 1453 1675 1090 \nQ 1841 728 2228 728 \nQ 2613 728 2778 1090 \nQ 2944 1453 2944 2338 \nz\nM 4147 2328 \nQ 4147 1169 3647 539 \nQ 3147 -91 2228 -91 \nQ 1306 -91 806 539 \nQ 306 1169 306 2328 \nQ 306 3491 806 4120 \nQ 1306 4750 2228 4750 \nQ 3147 4750 3647 4120 \nQ 4147 3491 4147 2328 \nz\n\" id=\"DejaVuSans-Bold-30\" transform=\"scale(0.015625)\"/>\n      </defs>\n      <use xlink:href=\"#DejaVuSans-Bold-30\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"text_2\">\n    <g clip-path=\"url(#p5aae5892ac)\">\n     <!-- 1 -->\n     <g transform=\"translate(115.851633 285.420341)scale(0.12 -0.12)\">\n      <defs>\n       <path d=\"M 750 831 \nL 1813 831 \nL 1813 3847 \nL 722 3622 \nL 722 4441 \nL 1806 4666 \nL 2950 4666 \nL 2950 831 \nL 4013 831 \nL 4013 0 \nL 750 0 \nL 750 831 \nz\n\" id=\"DejaVuSans-Bold-31\" transform=\"scale(0.015625)\"/>\n      </defs>\n      <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"text_3\">\n    <g clip-path=\"url(#p5aae5892ac)\">\n     <!-- 2 -->\n     <g transform=\"translate(329.721947 186.17034)scale(0.12 -0.12)\">\n      <defs>\n       <path d=\"M 1844 884 \nL 3897 884 \nL 3897 0 \nL 506 0 \nL 506 884 \nL 2209 2388 \nQ 2438 2594 2547 2791 \nQ 2656 2988 2656 3200 \nQ 2656 3528 2436 3728 \nQ 2216 3928 1850 3928 \nQ 1569 3928 1234 3808 \nQ 900 3688 519 3450 \nL 519 4475 \nQ 925 4609 1322 4679 \nQ 1719 4750 2100 4750 \nQ 2938 4750 3402 4381 \nQ 3866 4013 3866 3353 \nQ 3866 2972 3669 2642 \nQ 3472 2313 2841 1759 \nL 1844 884 \nz\n\" id=\"DejaVuSans-Bold-32\" transform=\"scale(0.015625)\"/>\n      </defs>\n      <use xlink:href=\"#DejaVuSans-Bold-32\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"text_4\">\n    <g clip-path=\"url(#p5aae5892ac)\">\n     <!-- 3 -->\n     <g transform=\"translate(415.388949 49.113341)scale(0.12 -0.12)\">\n      <defs>\n       <path d=\"M 2981 2516 \nQ 3453 2394 3698 2092 \nQ 3944 1791 3944 1325 \nQ 3944 631 3412 270 \nQ 2881 -91 1863 -91 \nQ 1503 -91 1142 -33 \nQ 781 25 428 141 \nL 428 1069 \nQ 766 900 1098 814 \nQ 1431 728 1753 728 \nQ 2231 728 2486 893 \nQ 2741 1059 2741 1369 \nQ 2741 1688 2480 1852 \nQ 2219 2016 1709 2016 \nL 1228 2016 \nL 1228 2791 \nL 1734 2791 \nQ 2188 2791 2409 2933 \nQ 2631 3075 2631 3366 \nQ 2631 3634 2415 3781 \nQ 2200 3928 1806 3928 \nQ 1516 3928 1219 3862 \nQ 922 3797 628 3669 \nL 628 4550 \nQ 984 4650 1334 4700 \nQ 1684 4750 2022 4750 \nQ 2931 4750 3382 4451 \nQ 3834 4153 3834 3553 \nQ 3834 3144 3618 2883 \nQ 3403 2622 2981 2516 \nz\n\" id=\"DejaVuSans-Bold-33\" transform=\"scale(0.015625)\"/>\n      </defs>\n      <use xlink:href=\"#DejaVuSans-Bold-33\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"text_5\">\n    <g clip-path=\"url(#p5aae5892ac)\">\n     <!-- 4 -->\n     <g transform=\"translate(86.472714 23.602159)scale(0.12 -0.12)\">\n      <defs>\n       <path d=\"M 2356 3675 \nL 1038 1722 \nL 2356 1722 \nL 2356 3675 \nz\nM 2156 4666 \nL 3494 4666 \nL 3494 1722 \nL 4159 1722 \nL 4159 850 \nL 3494 850 \nL 3494 0 \nL 2356 0 \nL 2356 850 \nL 288 850 \nL 288 1881 \nL 2156 4666 \nz\n\" id=\"DejaVuSans-Bold-34\" transform=\"scale(0.015625)\"/>\n      </defs>\n      <use xlink:href=\"#DejaVuSans-Bold-34\"/>\n     </g>\n    </g>\n   </g>\n  </g>\n </g>\n <defs>\n  <clipPath id=\"p5aae5892ac\">\n   <rect height=\"288\" width=\"432\" x=\"7.2\" y=\"7.2\"/>\n  </clipPath>\n </defs>\n</svg>\n",
      "image/png": "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\n"
     },
     "metadata": {}
    }
   ],
   "source": [
    "g = nx.Graph()\n",
    "nx.add_path(g, [0,1])\n",
    "nx.add_path(g, [1,2])\n",
    "nx.add_path(g, [2,3])\n",
    "nx.add_path(g, [3,4])\n",
    "nx.add_path(g, [0,4])\n",
    "nx.add_path(g, [0,2])\n",
    "nx.draw(g,with_labels=True, font_weight='bold')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如上如，我们得到一个由5个节点和6条边构成的图结构。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 搭建QAOA量子线路\n",
    "\n",
    "### 线路搭建\n",
    "\n",
    "这里我们采用量子绝热近似算法，经过演化将量子态从$X^{\\otimes n}$的本征态演化到图多应哈密的量的基态。\n",
    "\n",
    "搭建图对应哈密顿量的含时演化线路："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def build_hc(g,para):\n",
    "    hc = Circuit()\n",
    "    for i in g.edges:\n",
    "        hc += ZZ(para).on(i)\n",
    "    return hc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "搭建$X^{\\otimes n}$含时演化的量子线路："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "def build_hb(g, para):\n",
    "    hc = Circuit()\n",
    "    for i in g.nodes:\n",
    "        hc += RX(para).on(i)\n",
    "    return hc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了使得最后优化的结果足够准确，我们需要将量子线路重复多次，因此我们通过如下函数搭建多层的训练网络："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def build_ansatz(g, p):\n",
    "    c = Circuit()\n",
    "    for i in range(p):\n",
    "        c += build_hc(g,f'g{i}')\n",
    "        c += build_hb(g,f'b{i}')\n",
    "    return c"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "构建图对应的哈密顿量："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def build_ham(g):\n",
    "    hc = QubitOperator()\n",
    "    for i in g.edges:\n",
    "        hc += QubitOperator(f'Z{i[0]} Z{i[1]}')\n",
    "    return hc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 生成完整的量子线路和图所对应的哈密顿量\n",
    "\n",
    "这里我们选择`p = 4`，表示选用4曾的QAOA量子线路，`ansatz`是求解该问题的量子线路，`init_state_circ`是将量子态制备到均匀叠加态上的量子线路。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "p = 4\n",
    "ham = Hamiltonian(build_ham(g))\n",
    "ansatz = build_ansatz(g, p)\n",
    "init_state_circ = UN(H, g.nodes)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 搭建待训练量子神经网络\n",
    "\n",
    "由于该问题不需要编码层量子线路，我们这里使用`MindQuantumAnsatzOnlyLayer`作为待训练的量子神经网络，并采用`Adam`优化器。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "net = MindQuantumAnsatzOnlyLayer(ansatz.para_name, init_state_circ+ansatz, ham)\n",
    "opti = nn.Adam(net.trainable_params(), learning_rate=0.05)\n",
    "train_net = nn.TrainOneStepCell(net, opti)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练并展示结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "train step: 0 , cut: [[2.9974403]]\ntrain step: 10 , cut: [[4.118001]]\ntrain step: 20 , cut: [[4.7207108]]\ntrain step: 30 , cut: [[4.8198557]]\ntrain step: 40 , cut: [[4.8452663]]\ntrain step: 50 , cut: [[4.894426]]\ntrain step: 60 , cut: [[4.9361014]]\ntrain step: 70 , cut: [[4.93437]]\ntrain step: 80 , cut: [[4.937895]]\ntrain step: 90 , cut: [[4.93891]]\ntrain step: 100 , cut: [[4.939043]]\ntrain step: 110 , cut: [[4.939199]]\ntrain step: 120 , cut: [[4.9392414]]\ntrain step: 130 , cut: [[4.9392495]]\ntrain step: 140 , cut: [[4.9392548]]\ntrain step: 150 , cut: [[4.939256]]\ntrain step: 160 , cut: [[4.9392567]]\ntrain step: 170 , cut: [[4.939257]]\ntrain step: 180 , cut: [[4.939257]]\ntrain step: 190 , cut: [[4.939257]]\n"
    }
   ],
   "source": [
    "for i in range(200):\n",
    "    res = train_net()\n",
    "    if i % 10 == 0:\n",
    "        print(\"train step:\", i, \", cut:\", (len(g.edges)-res)/2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据上面的训练结果我们发现，该问题哈密顿量的基态能量对应的边切割数趋近与5。\n",
    "\n",
    "### 量子态展示\n",
    "\n",
    "前面我们通过训练得到了量子线路中参数的最优值，下面，我们通过`StateEvolution`类的`final_state`来输出量子线路在最优参数时的量子态，其中`ket`参数表示是否将最终量子态表示为右矢形式。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "(0.01627434976398945+0.03802764043211937j)¦00000⟩\n(-0.021525444462895393+0.010120502673089504j)¦00001⟩\n(0.018090182915329933-0.004060747567564249j)¦00010⟩\n(0.0007923207012936473+0.020563315600156784j)¦00011⟩\n(-0.021525444462895393+0.010120502673089504j)¦00100⟩\n(-0.009984630160033703-0.09121354669332504j)¦00101⟩\n(0.0007923207012936473+0.020563315600156784j)¦00110⟩\n(0.004760198760777712+0.01567949540913105j)¦00111⟩\n(0.012238028459250927-0.001225721905939281j)¦01000⟩\n(-0.3078080117702484+0.3823811709880829j)¦01001⟩\n(-0.04003702476620674-0.010155842639505863j)¦01010⟩\n(-0.3078080117702484+0.3823811709880829j)¦01011⟩\n(-0.028323723003268242-0.004314310383051634j)¦01100⟩\n(-0.04003702476620674-0.010155842639505863j)¦01101⟩\n(-0.028323723003268242-0.004314310383051634j)¦01110⟩\n(0.012238028459250927-0.001225721905939281j)¦01111⟩\n(0.012238028459250927-0.001225721905939281j)¦10000⟩\n(-0.028323723003268242-0.004314310383051634j)¦10001⟩\n(-0.04003702476620674-0.010155842639505863j)¦10010⟩\n(-0.028323723003268242-0.004314310383051634j)¦10011⟩\n(-0.3078080117702484+0.3823811709880829j)¦10100⟩\n(-0.04003702476620674-0.010155842639505863j)¦10101⟩\n(-0.3078080117702484+0.3823811709880829j)¦10110⟩\n(0.012238028459250927-0.001225721905939281j)¦10111⟩\n(0.004760198760777712+0.01567949540913105j)¦11000⟩\n(0.0007923207012936473+0.020563315600156784j)¦11001⟩\n(-0.009984630160033703-0.09121354669332504j)¦11010⟩\n(-0.021525444462895393+0.010120502673089504j)¦11011⟩\n(0.0007923207012936473+0.020563315600156784j)¦11100⟩\n(0.018090182915329933-0.004060747567564249j)¦11101⟩\n(-0.021525444462895393+0.010120502673089504j)¦11110⟩\n(0.01627434976398945+0.03802764043211937j)¦11111⟩\n"
    }
   ],
   "source": [
    "pr = dict(zip(ansatz.para_name, net.weight.asnumpy()))\n",
    "print(StateEvolution(init_state_circ+ansatz).final_state(pr, ket=True))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 概率图\n",
    "\n",
    "我们画出最终量子态在计算基矢下的概率分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<svg height=\"269.391402pt\" version=\"1.1\" viewBox=\"0 0 378.465625 269.391402\" width=\"378.465625pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n   <cc:Work>\n    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n    <dc:date>2021-08-30T08:18:15.952192</dc:date>\n    <dc:format>image/svg+xml</dc:format>\n    <dc:creator>\n     <cc:Agent>\n      <dc:title>Matplotlib v3.4.2, https://matplotlib.org/</dc:title>\n     </cc:Agent>\n    </dc:creator>\n   </cc:Work>\n  </rdf:RDF>\n </metadata>\n <defs>\n  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n  <g id=\"patch_1\">\n   <path d=\"M 0 269.391402 \nL 378.465625 269.391402 \nL 378.465625 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n  </g>\n  <g id=\"axes_1\">\n   <g id=\"patch_2\">\n    <path d=\"M 36.465625 225.8531 \nL 371.265625 225.8531 \nL 371.265625 8.4131 \nL 36.465625 8.4131 \nz\n\" style=\"fill:#ffffff;\"/>\n   </g>\n   <g id=\"patch_3\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 51.683807 225.8531 \nL 59.340754 225.8531 \nL 59.340754 224.382678 \nL 51.683807 224.382678 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_4\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 61.25499 225.8531 \nL 68.911937 225.8531 \nL 68.911937 225.366869 \nL 61.25499 225.366869 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_5\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 70.826174 225.8531 \nL 78.483121 225.8531 \nL 78.483121 225.557681 \nL 70.826174 225.557681 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_6\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 80.397357 225.8531 \nL 88.054304 225.8531 \nL 88.054304 225.489157 \nL 80.397357 225.489157 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_7\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 89.968541 225.8531 \nL 97.625488 225.8531 \nL 97.625488 225.366869 \nL 89.968541 225.366869 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_8\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 99.539724 225.8531 \nL 107.196671 225.8531 \nL 107.196671 218.617163 \nL 99.539724 218.617163 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_9\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 109.110908 225.8531 \nL 116.767855 225.8531 \nL 116.767855 225.489157 \nL 109.110908 225.489157 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_10\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 118.682092 225.8531 \nL 126.339038 225.8531 \nL 126.339038 225.622342 \nL 118.682092 225.622342 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_11\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 128.253275 225.8531 \nL 135.910222 225.8531 \nL 135.910222 225.723095 \nL 128.253275 225.723095 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_12\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 137.824459 225.8531 \nL 145.481405 225.8531 \nL 145.481405 18.767386 \nL 137.824459 18.767386 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_13\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 147.395642 225.8531 \nL 155.052589 225.8531 \nL 155.052589 224.386847 \nL 147.395642 224.386847 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_14\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 156.966826 225.8531 \nL 164.623773 225.8531 \nL 164.623773 18.767386 \nL 156.966826 18.767386 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_15\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 166.538009 225.8531 \nL 174.194956 225.8531 \nL 174.194956 225.147652 \nL 166.538009 225.147652 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_16\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 176.109193 225.8531 \nL 183.76614 225.8531 \nL 183.76614 224.386847 \nL 176.109193 224.386847 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_17\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 185.680376 225.8531 \nL 193.337323 225.8531 \nL 193.337323 225.147652 \nL 185.680376 225.147652 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_18\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 195.25156 225.8531 \nL 202.908507 225.8531 \nL 202.908507 225.723095 \nL 195.25156 225.723095 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_19\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 204.822743 225.8531 \nL 212.47969 225.8531 \nL 212.47969 225.723095 \nL 204.822743 225.723095 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_20\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 214.393927 225.8531 \nL 222.050874 225.8531 \nL 222.050874 225.147652 \nL 214.393927 225.147652 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_21\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 223.96511 225.8531 \nL 231.622057 225.8531 \nL 231.622057 224.386847 \nL 223.96511 224.386847 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_22\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 233.536294 225.8531 \nL 241.193241 225.8531 \nL 241.193241 225.147652 \nL 233.536294 225.147652 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_23\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 243.107477 225.8531 \nL 250.764424 225.8531 \nL 250.764424 18.767386 \nL 243.107477 18.767386 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_24\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 252.678661 225.8531 \nL 260.335608 225.8531 \nL 260.335608 224.386847 \nL 252.678661 224.386847 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_25\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 262.249845 225.8531 \nL 269.906791 225.8531 \nL 269.906791 18.767386 \nL 262.249845 18.767386 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_26\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 271.821028 225.8531 \nL 279.477975 225.8531 \nL 279.477975 225.723095 \nL 271.821028 225.723095 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_27\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 281.392212 225.8531 \nL 289.049158 225.8531 \nL 289.049158 225.622342 \nL 281.392212 225.622342 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_28\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 290.963395 225.8531 \nL 298.620342 225.8531 \nL 298.620342 225.489157 \nL 290.963395 225.489157 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_29\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 300.534579 225.8531 \nL 308.191526 225.8531 \nL 308.191526 218.617163 \nL 300.534579 218.617163 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_30\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 310.105762 225.8531 \nL 317.762709 225.8531 \nL 317.762709 225.366869 \nL 310.105762 225.366869 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_31\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 319.676946 225.8531 \nL 327.333893 225.8531 \nL 327.333893 225.489157 \nL 319.676946 225.489157 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_32\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 329.248129 225.8531 \nL 336.905076 225.8531 \nL 336.905076 225.557681 \nL 329.248129 225.557681 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_33\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 338.819313 225.8531 \nL 346.47626 225.8531 \nL 346.47626 225.366869 \nL 338.819313 225.366869 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"patch_34\">\n    <path clip-path=\"url(#p30909900e2)\" d=\"M 348.390496 225.8531 \nL 356.047443 225.8531 \nL 356.047443 224.382678 \nL 348.390496 224.382678 \nz\n\" style=\"fill:#1f77b4;\"/>\n   </g>\n   <g id=\"matplotlib.axis_1\">\n    <g id=\"xtick_1\">\n     <g id=\"line2d_1\">\n      <defs>\n       <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"mfd98458bab\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"55.51228\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_1\">\n      <!-- 00000 -->\n      <g transform=\"translate(46.216036 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 2034 4250 \nQ 1547 4250 1301 3770 \nQ 1056 3291 1056 2328 \nQ 1056 1369 1301 889 \nQ 1547 409 2034 409 \nQ 2525 409 2770 889 \nQ 3016 1369 3016 2328 \nQ 3016 3291 2770 3770 \nQ 2525 4250 2034 4250 \nz\nM 2034 4750 \nQ 2819 4750 3233 4129 \nQ 3647 3509 3647 2328 \nQ 3647 1150 3233 529 \nQ 2819 -91 2034 -91 \nQ 1250 -91 836 529 \nQ 422 1150 422 2328 \nQ 422 3509 836 4129 \nQ 1250 4750 2034 4750 \nz\n\" id=\"DejaVuSans-30\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_2\">\n     <g id=\"line2d_2\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"65.083464\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_2\">\n      <!-- 00001 -->\n      <g transform=\"translate(55.787219 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 794 531 \nL 1825 531 \nL 1825 4091 \nL 703 3866 \nL 703 4441 \nL 1819 4666 \nL 2450 4666 \nL 2450 531 \nL 3481 531 \nL 3481 0 \nL 794 0 \nL 794 531 \nz\n\" id=\"DejaVuSans-31\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_3\">\n     <g id=\"line2d_3\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"74.654647\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_3\">\n      <!-- 00010 -->\n      <g transform=\"translate(65.358403 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_4\">\n     <g id=\"line2d_4\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"84.225831\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_4\">\n      <!-- 00011 -->\n      <g transform=\"translate(74.929586 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_5\">\n     <g id=\"line2d_5\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"93.797014\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_5\">\n      <!-- 00100 -->\n      <g transform=\"translate(84.50077 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_6\">\n     <g id=\"line2d_6\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"103.368198\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_6\">\n      <!-- 00101 -->\n      <g transform=\"translate(94.071953 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_7\">\n     <g id=\"line2d_7\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"112.939381\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_7\">\n      <!-- 00110 -->\n      <g transform=\"translate(103.643137 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_8\">\n     <g id=\"line2d_8\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"122.510565\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_8\">\n      <!-- 00111 -->\n      <g transform=\"translate(113.214321 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_9\">\n     <g id=\"line2d_9\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"132.081748\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_9\">\n      <!-- 01000 -->\n      <g transform=\"translate(122.785504 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_10\">\n     <g id=\"line2d_10\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"141.652932\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_10\">\n      <!-- 01001 -->\n      <g transform=\"translate(132.356688 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_11\">\n     <g id=\"line2d_11\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"151.224116\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_11\">\n      <!-- 01010 -->\n      <g transform=\"translate(141.927871 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_12\">\n     <g id=\"line2d_12\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"160.795299\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_12\">\n      <!-- 01011 -->\n      <g transform=\"translate(151.499055 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_13\">\n     <g id=\"line2d_13\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"170.366483\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_13\">\n      <!-- 01100 -->\n      <g transform=\"translate(161.070238 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_14\">\n     <g id=\"line2d_14\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"179.937666\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_14\">\n      <!-- 01101 -->\n      <g transform=\"translate(170.641422 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_15\">\n     <g id=\"line2d_15\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"189.50885\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_15\">\n      <!-- 01110 -->\n      <g transform=\"translate(180.212605 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_16\">\n     <g id=\"line2d_16\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"199.080033\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_16\">\n      <!-- 01111 -->\n      <g transform=\"translate(189.783789 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_17\">\n     <g id=\"line2d_17\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"208.651217\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_17\">\n      <!-- 10000 -->\n      <g transform=\"translate(199.354972 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_18\">\n     <g id=\"line2d_18\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"218.2224\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_18\">\n      <!-- 10001 -->\n      <g transform=\"translate(208.926156 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_19\">\n     <g id=\"line2d_19\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"227.793584\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_19\">\n      <!-- 10010 -->\n      <g transform=\"translate(218.497339 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_20\">\n     <g id=\"line2d_20\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"237.364767\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_20\">\n      <!-- 10011 -->\n      <g transform=\"translate(228.068523 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_21\">\n     <g id=\"line2d_21\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"246.935951\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_21\">\n      <!-- 10100 -->\n      <g transform=\"translate(237.639706 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_22\">\n     <g id=\"line2d_22\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"256.507134\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_22\">\n      <!-- 10101 -->\n      <g transform=\"translate(247.21089 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_23\">\n     <g id=\"line2d_23\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"266.078318\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_23\">\n      <!-- 10110 -->\n      <g transform=\"translate(256.782074 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_24\">\n     <g id=\"line2d_24\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"275.649502\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_24\">\n      <!-- 10111 -->\n      <g transform=\"translate(266.353257 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_25\">\n     <g id=\"line2d_25\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"285.220685\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_25\">\n      <!-- 11000 -->\n      <g transform=\"translate(275.924441 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_26\">\n     <g id=\"line2d_26\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"294.791869\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_26\">\n      <!-- 11001 -->\n      <g transform=\"translate(285.495624 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_27\">\n     <g id=\"line2d_27\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"304.363052\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_27\">\n      <!-- 11010 -->\n      <g transform=\"translate(295.066808 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_28\">\n     <g id=\"line2d_28\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"313.934236\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_28\">\n      <!-- 11011 -->\n      <g transform=\"translate(304.637991 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_29\">\n     <g id=\"line2d_29\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"323.505419\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_29\">\n      <!-- 11100 -->\n      <g transform=\"translate(314.209175 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_30\">\n     <g id=\"line2d_30\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"333.076603\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_30\">\n      <!-- 11101 -->\n      <g transform=\"translate(323.780358 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_31\">\n     <g id=\"line2d_31\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"342.647786\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_31\">\n      <!-- 11110 -->\n      <g transform=\"translate(333.351542 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_32\">\n     <g id=\"line2d_32\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"352.21897\" xlink:href=\"#mfd98458bab\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_32\">\n      <!-- 11111 -->\n      <g transform=\"translate(342.922725 260.720841)rotate(-45)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-31\"/>\n      </g>\n     </g>\n    </g>\n   </g>\n   <g id=\"matplotlib.axis_2\">\n    <g id=\"ytick_1\">\n     <g id=\"line2d_33\">\n      <defs>\n       <path d=\"M 0 0 \nL -3.5 0 \n\" id=\"mf0dc1ccec6\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"36.465625\" xlink:href=\"#mf0dc1ccec6\" y=\"225.8531\"/>\n      </g>\n     </g>\n     <g id=\"text_33\">\n      <!-- 0.00 -->\n      <g transform=\"translate(7.2 229.652319)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 684 794 \nL 1344 794 \nL 1344 0 \nL 684 0 \nL 684 794 \nz\n\" id=\"DejaVuSans-2e\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_2\">\n     <g id=\"line2d_34\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"36.465625\" xlink:href=\"#mf0dc1ccec6\" y=\"182.882324\"/>\n      </g>\n     </g>\n     <g id=\"text_34\">\n      <!-- 0.05 -->\n      <g transform=\"translate(7.2 186.681543)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 691 4666 \nL 3169 4666 \nL 3169 4134 \nL 1269 4134 \nL 1269 2991 \nQ 1406 3038 1543 3061 \nQ 1681 3084 1819 3084 \nQ 2600 3084 3056 2656 \nQ 3513 2228 3513 1497 \nQ 3513 744 3044 326 \nQ 2575 -91 1722 -91 \nQ 1428 -91 1123 -41 \nQ 819 9 494 109 \nL 494 744 \nQ 775 591 1075 516 \nQ 1375 441 1709 441 \nQ 2250 441 2565 725 \nQ 2881 1009 2881 1497 \nQ 2881 1984 2565 2268 \nQ 2250 2553 1709 2553 \nQ 1456 2553 1204 2497 \nQ 953 2441 691 2322 \nL 691 4666 \nz\n\" id=\"DejaVuSans-35\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-35\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_3\">\n     <g id=\"line2d_35\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"36.465625\" xlink:href=\"#mf0dc1ccec6\" y=\"139.911548\"/>\n      </g>\n     </g>\n     <g id=\"text_35\">\n      <!-- 0.10 -->\n      <g transform=\"translate(7.2 143.710766)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_4\">\n     <g id=\"line2d_36\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"36.465625\" xlink:href=\"#mf0dc1ccec6\" y=\"96.940771\"/>\n      </g>\n     </g>\n     <g id=\"text_36\">\n      <!-- 0.15 -->\n      <g transform=\"translate(7.2 100.73999)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-35\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_5\">\n     <g id=\"line2d_37\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"36.465625\" xlink:href=\"#mf0dc1ccec6\" y=\"53.969995\"/>\n      </g>\n     </g>\n     <g id=\"text_37\">\n      <!-- 0.20 -->\n      <g transform=\"translate(7.2 57.769214)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 1228 531 \nL 3431 531 \nL 3431 0 \nL 469 0 \nL 469 531 \nQ 828 903 1448 1529 \nQ 2069 2156 2228 2338 \nQ 2531 2678 2651 2914 \nQ 2772 3150 2772 3378 \nQ 2772 3750 2511 3984 \nQ 2250 4219 1831 4219 \nQ 1534 4219 1204 4116 \nQ 875 4013 500 3803 \nL 500 4441 \nQ 881 4594 1212 4672 \nQ 1544 4750 1819 4750 \nQ 2544 4750 2975 4387 \nQ 3406 4025 3406 3419 \nQ 3406 3131 3298 2873 \nQ 3191 2616 2906 2266 \nQ 2828 2175 2409 1742 \nQ 1991 1309 1228 531 \nz\n\" id=\"DejaVuSans-32\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-32\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_6\">\n     <g id=\"line2d_38\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"36.465625\" xlink:href=\"#mf0dc1ccec6\" y=\"10.999219\"/>\n      </g>\n     </g>\n     <g id=\"text_38\">\n      <!-- 0.25 -->\n      <g transform=\"translate(7.2 14.798438)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-32\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-35\"/>\n      </g>\n     </g>\n    </g>\n   </g>\n   <g id=\"patch_35\">\n    <path d=\"M 36.465625 225.8531 \nL 36.465625 8.4131 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_36\">\n    <path d=\"M 371.265625 225.8531 \nL 371.265625 8.4131 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_37\">\n    <path d=\"M 36.465625 225.8531 \nL 371.265625 225.8531 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_38\">\n    <path d=\"M 36.465625 8.4131 \nL 371.265625 8.4131 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n  </g>\n </g>\n <defs>\n  <clipPath id=\"p30909900e2\">\n   <rect height=\"217.44\" width=\"334.8\" x=\"36.465625\" y=\"8.4131\"/>\n  </clipPath>\n </defs>\n</svg>\n",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "source": [
    "def show_amp(state):\n",
    "    amp = np.abs(state)**2\n",
    "    n_qubits = int(np.log2(len(amp)))\n",
    "    labels = [bin(i)[2:].zfill(n_qubits) for i in range(len(amp))]\n",
    "    plt.bar(labels, amp)\n",
    "    plt.xticks(rotation=45)\n",
    "    plt.show()\n",
    "state = StateEvolution(init_state_circ+ansatz).final_state(pr)\n",
    "show_amp(state)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据概率分布图我们发现，该Max-Cut问题具有四个简并解，每个解对应的概率大概为25%。\n",
    "\n",
    "## 总结\n",
    "\n",
    "这里我们通过量子近似优化算法来解决了Max-Cut问题，并得到了案例中的图对应的最大切割方案。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 参考文献\n",
    "\n",
    "[1] Edward Farhi, Jeffrey Goldstone, and Sam Gutmann. [A Quantum Approximate Optimization Algorithm](https://arxiv.org/pdf/1411.4028.pdf)"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "5545a57ef4a1ac7dca167cae0bf17fda051fcd0639773c034bd7ce77ffd97d30"
  },
  "kernelspec": {
   "display_name": "Python 3.7.5 64-bit",
   "language": "python",
   "name": "python37564bit6afae4a42a5941c0967cdcfc2650559a"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5-final"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}